// 全局变量
let templates = [];
let autoScrollInContainer = null;

// 动态加载模块
async function loadModules() {
  try {
    console.log("开始加载模块...");
    const { templates: loadedTemplates } = await import(
      chrome.runtime.getURL("template-registry.js")
    );
    const { autoScrollInContainer: scrollHelper } = await import(
      chrome.runtime.getURL("utils/scroll-helper.js")
    );
    
    // 更新全局变量
    templates = loadedTemplates;
    autoScrollInContainer = scrollHelper;
    
    console.log("模块加载成功:", templates);

    // 监听popup发来的消息
    chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
      console.log("收到消息:", request);

      if (request.action === "scrollContainer") {
        (async () => {
          try {
            // 遍历所有模板，找到匹配的模板
            for (const tpl of templates) {
              if (tpl.module && tpl.module.isMatch()) {
                if (typeof tpl.module.getScrollContainer === "function") {
                  const containerSelector = tpl.module.getScrollContainer();
                  console.log("开始滚动容器:", containerSelector);
                  try {
                    await autoScrollInContainer(containerSelector);
                    console.log("滚动完成");
                    sendResponse({ success: true });
                    return;
                  } catch (error) {
                    console.error("滚动过程出错:", error);
                    sendResponse({
                      success: false,
                      error: `滚动失败: ${error.message}`,
                    });
                    return;
                  }
                }
              }
            }
            sendResponse({ success: true }); // 如果没有找到需要滚动的容器，也返回成功
          } catch (error) {
            console.error("滚动过程出错:", error);
            sendResponse({ success: false, error: error.message });
          }
        })();
        return true; // 异步响应
      }

      if (request.action === "extract_metric") {
        (async () => {
          try {
            const tpl = templates.find((t) => t.id === request.templateId);
            console.log("找到模板:", tpl);

            if (!tpl) {
              sendResponse({ success: false, error: "未找到指定模板" });
              return;
            }

            if (!tpl.module.isMatch()) {
              sendResponse({ success: false, error: "当前页面不匹配该模板" });
              return;
            }

            // 设置全局变量
            window._extractionScope = request.scope;
            window._autoExport = request.autoExport;

            const data = await tpl.module.extract(request.scope);
            console.log("提取的数据:", data);
            sendResponse({ success: true, data });
          } catch (error) {
            console.error("提取数据时出错:", error);
            sendResponse({ success: false, error: error.message });
          }
        })();
        return true; // 异步响应
      }

      if (request.action === "getMerchantInfo") {
        (async () => {
          try {
            // 遍历所有模板，找到匹配的模板
            for (const tpl of templates) {
              if (tpl.module && tpl.module.isMatch()) {
                if (typeof tpl.module.getMerchantInfo === 'function') {
                  const data = await tpl.module.getMerchantInfo();
                  console.log("获取的商户信息:", data);
                  sendResponse({ success: true, data });
                  return;
                }
                else{
                  console.log("模板不支持获取商户信息",tpl.module);
                }
              }
              else{
                console.log("未找到匹配的模板",tpl.module);
              }
            }
            sendResponse({ success: false, error: "未找到匹配的模板或模板不支持获取商户信息" });
          } catch (error) {
            console.error("获取商户信息时出错:", error);
            sendResponse({ success: false, error: error.message });
          }
        })();
        return true; // 异步响应
      }

      if (request.action === "setCustomDateRange") {
        // 只保存日期范围信息，具体的设置操作会在提取数据时进行
        window._customDateRange = {
          startDate: request.startDate,
          endDate: request.endDate,
          periodType: request.periodType
        };
        sendResponse({ success: true });
        return true;
      }

      if (request.action === 'stop_extraction') {
        window._shouldStopExtraction = true;
        return;
      }
    });

    console.log("消息监听器已设置");
  } catch (error) {
    console.error("加载模块失败:", error);
  }
}

// 确保脚本只运行一次
if (!window._metricExtractorLoaded) {
  window._metricExtractorLoaded = true;
  // 添加初始化状态标志
  window._isInitialized = false;
  
  // 初始化函数
  async function initialize() {
    try {
      await loadModules();
      window._isInitialized = true;
      console.log("Content script 初始化完成");
    } catch (error) {
      console.error("Content script 初始化失败:", error);
    }
  }

  // 开始初始化
  initialize();
}
